unit Software;

interface

uses
  Windows, ActiveX, Classes, ComObj,SysUtils;

type
   ICalculator=interface (IUnknown)
     ['{62F3551C-5A88-11CF-9D30-8CA32AF8B605}']
  
      Function Add(X,Y:integer):integer; stdcall;
      Function Subtract(X,Y:integer):integer; stdcall;
   end;

   IWordEditor=interface (IUnknown)
    ['{62F3551D-5A88-11CF-9D30-8CA32AF8B605}']
 
    Function UpperString(s:WideString):WideString; 
                                                                                     stdcall;
   end;

  TSoftware = class(TComObject, 
                                     ICalculator, IWordEditor)
  protected
    {Declare ICalculator methods here}
     Function Add(X,Y:integer):integer; stdcall;
     Function Subtract(X,Y:integer):integer; stdcall;

    {Declare IWordEditor methods here}
     Function UpperString(s:WideString):WideString;
                                                                                     stdcall;

  end;

const
  Class_Software: TGUID =
            '{1DC23069-5BA9-11CF-9D30-AB4141FC3200}';

implementation

uses ComServ;

{ TSoftware }

function TSoftware.Add(X, Y: integer): integer;
begin
 result:=X+Y;
end;

function TSoftware.Subtract(X, Y: integer): integer;
begin
  result:=X-Y;
end;

function TSoftware.UpperString(s: WideString): WideString;
begin
  result:=UpperCase(s);
end;

initialization
  TComObjectFactory.Create(ComServer, 
											         TSoftware, 
												    Class_Software,
                                                    'Software',
													 '', 
														ciMultiInstance, 
														tmApartment);
end.
